package com.tx.review.generic;

/**
 * 测试泛型方法
 *
 * @author ：tx
 * @version:
 */
public class Test03 {
    public static void main(String[] args) {
        //测试类中的泛型方法
        //这里可以看出泛型方法中的T和泛型类中的T是不一样的
        Generic<String> generic = new Generic<>();
        generic.show(100);

        //测试泛型方法与可变参数
        generic.variable(1,"abc",2L,true);

        //测试静态方法泛型
        Generic.staticTest("嗯？");

    }

}

class Generic<T>{
    /**
     *  <T>: 泛型方法的标识，方法前包含这个才算是泛型方法。除此之外，其他的都不算是泛型方法
     *  T t: 泛型方法中可用的参数,只能声明在<T>中定义的类型。
     *      比如 ：如果在参数中 show（T t, E e）,那么会报错。Cannot resolve symbol 'E'。这是由于在标识中没有声明这个E
     *      值得注意的是：泛型方法中的T和泛型方法中的T完全不是一个概念，只是用了同一个名字
    */
    public <T> void show(T t){
        System.out.println(t);
    }


    //可变参数
    public <E> void variable(E...e){
        for (E e1 : e) {
            System.out.println(e1);
        }
    }

    //静态方法中使用泛型
//    public static void staticTest(T t){ //静态方法无法使用类定义上的泛型 cannot be referenced from a static context
    public static <E> void staticTest(E e){
        System.out.println(e);
    }

}
